package com.hua.designpattern.creational.factorymethod;

/**
 * 
 * @author joshua
 * 
 *         <pre>
 * 
 * 定义一个创建对象的接口，让其子类自己决定实例化哪一个工厂类，工厂模式使其创建过程延迟到子类进行。
 * 
 * 优点
 * 1、将创建实例的工作与使用实例的工作分开
 * 2、把初始化实例时的工作放到工厂里进行，使代码更容易维护。
 * 3、实现代码的修改开闭原则。
 * 
 * 缺点
 * 1.随着业务的扩展，会出现大量的类
 * 
 *   REF:
 *      Spring Bean
 *      
 *         </pre>
 *
 */

public class TestFactoryMethod {
	public static void main(String[] args) {
		BicycleFactory bicycleFactory = new BicycleFactory();
		Drivable bike = bicycleFactory.getBean();
		bike.drive();
		bike.stop();

		AutomobileFactory automobileFactory = new AutomobileFactory();
		Drivable automobile = automobileFactory.getBean();
		automobile.drive();
		automobile.stop();

		TrainFactory trainFactory = new TrainFactory();
		Drivable train = trainFactory.getBean();
		train.drive();
		train.stop();

	}
}
